Source: AP NPR

library(tidyverse)
library(knitr)
library(modelsummary)
library(lubridate)
library(ggplot2)
# Data importation and cleaning

# Import starting data (AAPP)
detainees <- read_csv("https://www.andrew.cmu.edu/user/jweiss2/21f_r/94842/final_2021/detained.csv.gz")
imprisoned <- read_csv("https://www.andrew.cmu.edu/user/jweiss2/21f_r/94842/final_2021/imprisoned.csv.gz")
fallen <- read_csv("https://www.andrew.cmu.edu/user/jweiss2/21f_r/94842/final_2021/fallen.csv")

# Indicators data
# conflicts (ACLED)
conflicts <- read_csv("https://www.andrew.cmu.edu/user/jweiss2/21f_r/94842/final_2021/conflicts.csv.gz")

# sectors (MIMU)
tmp <- tempfile(fileext = ".xlsm")
httr::GET(
  url = "https://www.andrew.cmu.edu/user/jweiss2/21f_r/94842/final_2021/MIMU_BaselineData_AllSectors_Countrywide_18Mar2021_revised.xlsm", httr::write_disk(tmp))
## Response [https://www.andrew.cmu.edu/user/jweiss2/21f_r/94842/final_2021/MIMU_BaselineData_AllSectors_Countrywide_18Mar2021_revised.xlsm]
##   Date: 2021-12-10 04:52
##   Status: 200
##   Content-Type: application/vnd.ms-excel.sheet.macroEnabled.12
##   Size: 19.3 MB
## <ON DISK>  /var/folders/93/17xtk1757sd33wyy7r7_jngc0000gn/T//RtmpfXDorh/fileae504f48508.xlsm
sector.indicators = 
  readxl::read_xlsx(tmp, sheet=3, skip = 5) %>% as_tibble()

### Organize all sectors data to be given by nested tibbles per indicator
sector.nest <- sector.indicators %>% 
  select(1:3, 
         Indicator_Name, Indicator_Type, Sector, Unit, 
         starts_with("20"), Source_Name) %>%
  mutate(Indicator = paste(Indicator_Name, Indicator_Type, 
                           Sector, Unit, Source_Name, sep="|")) %>%
  select(1:3, Indicator, starts_with("20")) %>%
  pivot_longer(cols = starts_with("20"), 
               names_to = "Year", 
               values_to ="Value") %>%
  filter(!is.na(Value)) %>%
  nest(data = -Indicator) %>%
  separate(Indicator, sep="\\|", 
           into = c("Indicator_Name", "Indicator_Type",
                    "Sector","Unit","Source_Name")) 

detainees <- detainees %>% #extract townships from address column and clean the township names
  mutate(Township = str_replace_all(Address,".*,","")) %>%
  mutate(Township = str_replace_all(Township,"T?own.*","")) %>%
  mutate(Township = str_replace_all(Township,".\r?,.*","")) %>%
  mutate(Township = str_replace_all(Township,"(\r.*?)","")) %>%
  mutate(Age = as.numeric(detainees$Age), #assign Age to a numerical variable
         Gender = factor(Sex, levels = c("F", "M")), #assign gender to a categorical variable
         Event = "Detained") %>% #assign all observations a "detained" status
  mutate(Condition = 
           case_when(str_detect(`Current Condition`, "Detained") ~ "Detained",
                     str_detect(`Current Condition`, "House Arrest") ~ "House Arrest",
                     str_detect(`Current Condition`, "Arrested") ~ "Arrested")) %>%
  mutate(Condition = factor(Condition, levels = c("Detained", "House Arrest", "Arrested"))) %>% #categorize condition of all detainees
  mutate(Occupation =  case_when(str_detect(`Status`, "Student") ~ "Student", #extract & categorize observations into occupations
                                 str_detect(`Status`, "Media") ~ "Reporter",
                                 str_detect(`Status`, "Government") ~ "Government",
                                 str_detect(`Status`, "Minister") ~ "Government",
                                 str_detect(`Status`, "MP") ~ "Government",
                                 str_detect(`Status`, "Ministry") ~ "Government",
                                 str_detect(`Status`, "NLD") ~ "Government",
                                 str_detect(`Status`, "CSO") ~ "Government",
                                 str_detect(`Status`, "UEC") ~ "Government",
                                 str_detect(`Status`, "Secretary") ~ "Government",
                                 str_detect(`Status`, "Public Servant") ~ "Government",
                                 str_detect(`Status`, "Teacher") ~ "Educator",
                                 str_detect(`Status`, "Education") ~ "Educator",
                                 str_detect(`Status`, "University") ~ "Educator",
                                 str_detect(`Status`, "Professor") ~ "Educator",
                                 str_detect(`Status`, "Civilian") ~ "Civilian",
                                 str_detect(`Status`, "Worker") ~ "Civilian",
                                 str_detect(`Status`, "Artist") ~ "Artist",
                                 str_detect(`Status`, "Doctor") ~ "Medic",
                                 str_detect(`Status`, "Nurse") ~ "Medic",
                                 str_detect(`Status`, "Business") ~ "Business person",
                                 str_detect(`Status`, "Company") ~ "Business person",
                                 str_detect(`Status`, "Religious") ~ "Religious worker",
                                 str_detect(`Status`, "Engineer") ~ "Engineer",
                                 str_detect(`Status`, "Journalism") ~ "Reporter",
                                 TRUE ~ "Other"),
         Month = case_when(str_detect(`Date of Arrest`, "Jan") ~ "Jan", #extract month value from dates
                           str_detect(`Date of Arrest`, "Feb") ~ "Feb",
                           str_detect(`Date of Arrest`, "Mar") ~ "Mar",
                           str_detect(`Date of Arrest`, "Apr") ~ "Apr",
                           str_detect(`Date of Arrest`, "May") ~ "May",
                           str_detect(`Date of Arrest`, "Jun") ~ "Jun",
                           str_detect(`Date of Arrest`, "Jul") ~ "Jul",
                           str_detect(`Date of Arrest`, "Aug") ~ "Aug",
                           str_detect(`Date of Arrest`, "Sep") ~ "Sep",
                           str_detect(`Date of Arrest`, "Oct") ~ "Oct",
                           str_detect(`Date of Arrest`, "Nov") ~ "Nov",
                           str_detect(`Date of Arrest`, "Dec") ~ "Dec")) %>%
  mutate(Month = factor(Month, levels = c("Jan", 
                                          "Feb",
                                          "Mar",
                                          "Apr",
                                          "May",
                                          "Jun",
                                          "Jul",
                                          "Aug",
                                          "Sep",
                                          "Oct",
                                          "Nov",
                                          "Dec"))) %>%
  mutate(Occupation = factor(Occupation, levels = c("Government",
                                                    "Civilian",
                                                    "Student",
                                                    "Activist",
                                                    "Volunteer",
                                                    "Reporter",
                                                    "Educator",
                                                    "Artist",
                                                    "Medic",
                                                    "Security Forces",
                                                    "Religious worker",
                                                    "Business person",
                                                    "Engineer",
                                                    "Farmer")))

imprisoned <- imprisoned %>% #extract townships from address column and clean the township names
  mutate(Township = str_replace_all(Address,".*,","")) %>%
  mutate(Township = str_replace_all(Township,"T?own.*","")) %>%
  mutate(Township = str_replace_all(Township,".\r?,.*","")) %>%
  mutate(Township = str_replace_all(Township,"(\r.*?)","")) %>%
  mutate(Age = as.numeric(imprisoned$Age), #clean age
         Gender = factor(`Sex /Age`, levels = c("F", "M")),
         Event = "Imprisoned") %>%
  mutate(Occupation =  case_when(str_detect(`Status`, "Student") ~ "Student", #extract & categorize observations into occupations
                                 str_detect(`Status`, "Media") ~ "Reporter",
                                 str_detect(`Status`, "Government") ~ "Government",
                                 str_detect(`Status`, "Minister") ~ "Government",
                                 str_detect(`Status`, "MP") ~ "Government",
                                 str_detect(`Status`, "Ministry") ~ "Government",
                                 str_detect(`Status`, "NLD") ~ "Government",
                                 str_detect(`Status`, "CSO") ~ "Government",
                                 str_detect(`Status`, "UEC") ~ "Government",
                                 str_detect(`Status`, "Secretary") ~ "Government",
                                 str_detect(`Status`, "Public Servant") ~ "Government",
                                 str_detect(`Status`, "Teacher") ~ "Educator",
                                 str_detect(`Status`, "Education") ~ "Educator",
                                 str_detect(`Status`, "University") ~ "Educator",
                                 str_detect(`Status`, "Professor") ~ "Educator",
                                 str_detect(`Status`, "Civilian") ~ "Civilian",
                                 str_detect(`Status`, "Worker") ~ "Civilian",
                                 str_detect(`Status`, "Artist") ~ "Artist",
                                 str_detect(`Status`, "Doctor") ~ "Medic",
                                 str_detect(`Status`, "Nurse") ~ "Medic",
                                 str_detect(`Status`, "Business") ~ "Business person",
                                 str_detect(`Status`, "Company") ~ "Business person",
                                 str_detect(`Status`, "Religious") ~ "Religious worker",
                                 str_detect(`Status`, "Engineer") ~ "Engineer",
                                 str_detect(`Status`, "Journalism") ~ "Reporter",
                                 TRUE ~ "Other"),
         Month = case_when(str_detect(`Date of Arrest`, "Jan") ~ "Jan", #extract month value from date
                           str_detect(`Date of Arrest`, "Feb") ~ "Feb",
                           str_detect(`Date of Arrest`, "Mar") ~ "Mar",
                           str_detect(`Date of Arrest`, "Apr") ~ "Apr",
                           str_detect(`Date of Arrest`, "May") ~ "May",
                           str_detect(`Date of Arrest`, "Jun") ~ "Jun",
                           str_detect(`Date of Arrest`, "Jul") ~ "Jul",
                           str_detect(`Date of Arrest`, "Aug") ~ "Aug",
                           str_detect(`Date of Arrest`, "Sep") ~ "Sep",
                           str_detect(`Date of Arrest`, "Oct") ~ "Oct",
                           str_detect(`Date of Arrest`, "Nov") ~ "Nov",
                           str_detect(`Date of Arrest`, "Dec") ~ "Dec")) %>%
  mutate(Month = factor(Month, levels = c("Jan",
                                          "Feb",
                                          "Mar",
                                          "Apr",
                                          "May",
                                          "Jun",
                                          "Jul",
                                          "Aug",
                                          "Sep",
                                          "Oct",
                                          "Nov",
                                          "Dec"))) %>%
  mutate(Occupation = factor(Occupation, levels = c("Government", 
                                                    "Civilian",
                                                    "Student",
                                                    "Activist",
                                                    "Volunteer",
                                                    "Reporter",
                                                    "Educator",
                                                    "Artist",
                                                    "Medic",
                                                    "Security Forces",
                                                    "Religious worker",
                                                    "Business person",
                                                    "Engineer",
                                                    "Farmer")))

fallen <- fallen %>% #extract townships from address column and clean the township names
  mutate(Township = str_replace_all(Township,".*,","")) %>%
  mutate(Township = str_replace_all(Township,"T?own.*","")) %>%
  mutate(Township = str_replace_all(Township,".\r?,.*","")) %>%
  mutate(Township = str_replace_all(Township,"(\r.*?)","")) %>%
  mutate(Age = as.numeric(fallen$Age),
         Gender = factor(Sex, levels = c("F", "M")),
         Event = "Fallen",
         Month = case_when(str_detect(`Deceased Date`, "Jan") ~ "Jan", #extract month value from date
                           str_detect(`Deceased Date`, "Feb") ~ "Feb",
                           str_detect(`Deceased Date`, "Mar") ~ "Mar",
                           str_detect(`Deceased Date`, "Apr") ~ "Apr",
                           str_detect(`Deceased Date`, "May") ~ "May",
                           str_detect(`Deceased Date`, "Jun") ~ "Jun",
                           str_detect(`Deceased Date`, "Jul") ~ "Jul",
                           str_detect(`Deceased Date`, "Aug") ~ "Aug",
                           str_detect(`Deceased Date`, "Sep") ~ "Sep",
                           str_detect(`Deceased Date`, "Oct") ~ "Oct",
                           str_detect(`Deceased Date`, "Nov") ~ "Nov",
                           str_detect(`Deceased Date`, "Dec") ~ "Dec")) %>%
  mutate(Month = factor(Month, levels = c("Jan",
                                          "Feb",
                                          "Mar",
                                          "Apr",
                                          "May",
                                          "Jun",
                                          "Jul",
                                          "Aug",
                                          "Sep",
                                          "Oct",
                                          "Nov",
                                          "Dec"))) %>%
  mutate(Occupation =  case_when(str_detect(`Organization`, "Student") ~ "Student", #extract & categorize observations into occupations
                                 str_detect(`Organization`, "Media") ~ "Reporter",
                                 str_detect(`Organization`, "Minister") ~ "Government",
                                 str_detect(`Organization`, "MP") ~ "Government",
                                 str_detect(`Organization`, "Ministry") ~ "Government",
                                 str_detect(`Organization`, "NLD") ~ "Government",
                                 str_detect(`Organization`, "CSO") ~ "Government",
                                 str_detect(`Organization`, "UEC") ~ "Government",
                                 str_detect(`Organization`, "Chairman") ~ "Government",
                                 str_detect(`Organization`, "Secretary") ~ "Government",
                                 str_detect(`Organization`, "Public Servant") ~ "Government",
                                 str_detect(`Organization`, "Teacher") ~ "Educator",
                                 str_detect(`Organization`, "Education") ~ "Educator",
                                 str_detect(`Organization`, "University") ~ "Educator",
                                 str_detect(`Organization`, "Professor") ~ "Educator",
                                 str_detect(`Organization`, "Civilian") ~ "Civilian",
                                 str_detect(`Organization`, "Artist") ~ "Artist",
                                 str_detect(`Organization`, "Security") ~ "Security Forces",
                                 str_detect(`Organization`, "Doctor") ~ "Medic",
                                 str_detect(`Organization`, "Nurse") ~ "Medic",
                                 str_detect(`Organization`, "Business") ~ "Business person",
                                 str_detect(`Organization`, "Company") ~ "Business person",
                                 str_detect(`Organization`, "Religious") ~ "Religious worker",
                                 str_detect(`Organization`, "Engineer") ~ "Engineer",
                                 str_detect(`Organization`, "Journalism") ~ "Reporter",
                                 str_detect(`Organization`, "Farmer") ~ "Farmer",
                                 str_detect(`Organization`, "Volunteer") ~ "Volunteer",
                                 str_detect(`Organization`, "Activist") ~ "Activist",
                                 TRUE ~ "Other")) %>%
  mutate(Occupation = factor(Occupation, levels = c("Government",
                                                    "Civilian",
                                                    "Student",
                                                    "Activist",
                                                    "Volunteer",
                                                    "Reporter",
                                                    "Educator",
                                                    "Artist",
                                                    "Medic",
                                                    "Security Forces",
                                                    "Religious worker",
                                                    "Business person",
                                                    "Engineer",
                                                    "Farmer")))

coup.victims <- bind_rows(detainees, fallen, imprisoned) #merge detainees, fallen & imprisoned tables

coup.victims <- coup.victims %>%
  mutate(Event = factor(Event, levels = c("Detained",
                                          "Imprisoned",
                                          "Fallen"))) %>%
  mutate(AgeGroup = case_when(Age >= 40 ~ 'Over 40', #categorize observations into age groups
                              Age >= 30  & Age < 40 ~ '30-39',
                              Age >= 18  & Age < 30 ~ '18-29',
                              Age < 18 ~ 'Under 18')) %>%
  mutate(AgeGroup = factor(AgeGroup, levels = c("Under 18", "18-29", "30-39", "Over 40")))

detainees.summary <- detainees %>% #summary table for detainees
  mutate(Name = str_replace_all(Name,".\r?,.*","")) %>%
  mutate(Name = str_replace_all(Name,"(\r.*?)","")) %>%
  filter(!is.na(Age) & !is.na(Gender) & !is.na(Occupation) & !is.na(Condition) & !is.na(Month) & !is.na(Township)) %>%
  rename(`Detainment month` = Month) %>%
  select(Name, Gender, Age, Occupation, `Detainment month`, Condition, Township)

imprisoned.summary <- imprisoned %>% #summary table for imprisoned
  mutate(Name = str_replace_all(Name,".\r?,.*","")) %>%
  mutate(Name = str_replace_all(Name,"(\r.*?)","")) %>%
  filter(!is.na(Age) & !is.na(Gender) & !is.na(Occupation) & !is.na(Month) & !is.na(Township)) %>%
  rename(`Imprisonment month` = Month) %>%
  select(Name, Gender, Age, Occupation, `Imprisonment month`, Township)

fallen.summary <- fallen %>% #summary table for fallen
  mutate(Name = str_replace_all(Name,".\r?,.*","")) %>%
  mutate(Name = str_replace_all(Name,"(\r.*?)","")) %>%
  filter(!is.na(Age) & !is.na(Gender) & !is.na(Occupation) & !is.na(Month) & !is.na(Township))  %>%
  rename(`Death month` = Month) %>%
  select(Name, Gender, Age, Occupation, `Death month`, Township)

victims.summary <- coup.victims %>% #summary table for all victims
  mutate(Name = str_replace_all(Name,".\r?,.*","")) %>%
  mutate(Name = str_replace_all(Name,"(\r.*?)","")) %>%
  filter(!is.na(Age) & !is.na(Gender) & !is.na(Occupation) & !is.na(Month) & !is.na(Township)) %>%
  select(Name, Gender, Age, Occupation, Month, Event, Township)


#leven function
leven <- function(x, y, k = 0, ignore.case = T) {
  data.frame(y = y) %>%
    as_tibble() %>%
    # compute Levenshtein distance for string x for each y
    mutate(distance = utils::adist(x, y, 
                                   ignore.case=ignore.case) %>% .[1,]) %>%
    # keep y's within k of the best match
    filter(distance <= min(distance, na.rm = T) + k) %>%
    mutate(distance.per.char = distance/nchar(y))
}

# apply leven function
apply_leven <- function(x, y, k = 0, distance.threshold = 0.3, ignore.case = F) {
  data.frame(x = x) %>%
    # get potential matches for each x as a list of tibbles
    mutate(leven.df = map(x, ~ leven(.x, 
                                     y = y,
                                     k = k, 
                                     ignore.case=ignore.case))) %>%
    unnest(everything()) %>%
    mutate(is.match = distance.per.char < distance.threshold) %>%
    # order by best match
    arrange(distance.per.char) %>%
    # keep the best match per `x`
    group_by(x) %>% 
    slice(1) %>%  
    ungroup() %>%
    # convert non-matches to Other
    mutate(y = ifelse(is.match, y, "Other"))  
}

#table for township sizes
township.sizes <- sector.nest %>% 
  filter(Indicator_Name == "Population size", 
         Indicator_Type == "Total", 
         str_detect(Source_Name, "Census")) %>%
  unnest(everything())

#table for nested detainee data excluding Township
nested.det <- detainees %>% nest(data =- Township)

#table with detainees joined to MIMU townships
joined.det <- nested.det %>%
  inner_join(apply_leven(nested.det$Township, 
                         township.sizes$Township_Name,
                         distance.threshold = 0.28),
             by = c("Township" = "x")) %>%
  rename(detainee_township = Township, MIMU_township = y)

#table showing detainees per MIMU township
joined.mimu <- joined.det %>%
  group_by(MIMU_township) %>%
  summarise(detainees = sum(map_dbl(data,nrow)))

#coup victims table merged with MIMU township table
joined.victims <- coup.victims %>% 
  nest(data =- Township) %>%
  inner_join(apply_leven(.$Township,
                         township.sizes$Township_Name,
                         distance.threshold = 0.28),
             by = c("Township" = "x")) %>%
  rename(victims_township = Township, MIMU_township = y) %>%
  #summarize at MIMU_township level
  group_by(MIMU_township) %>%
  summarise(pop = sum(map_dbl(data,nrow))) %>%
  ungroup() %>%
  # attach MIMU indicator and compute outcome "detainees.per.1000"
  left_join(township.sizes, by = c("MIMU_township" = "Township_Name")) %>%
  select(MIMU_township, pop)

Abstract

The military coup in Myanmar during February of 2021 led to political unrest, mass protests, and clashes among armed groups. Non-governmental organizations, specifically the Assistance Association for Political Prisoners, Armed Conflict Location and Event Data Project, have maintained records of conflicts, detainment, imprisonments, and deaths since the coup indicating the detainment of over 6709 people and the death of at least 1208 people including children. This report presents exploration of the data collected between February and November 2021, statistical analysis to determine drivers of detainment, as well as relationship with socioeconomic indicators. Using a chi-square test of independence, it was discovered that there is a significant relationship between the condition (i.e. detained, imprisoned or dead) and the victim’s status (i.e. government worker, civilian or student). The regression analysis conducted suggests that there is a significant relationship between detainment and townships with college level graduates and households with access to the internet. This is evident in the willingness of individuals to speak against oppression and the creation of awareness across the internet. In response, the military has resulted to arbitrary detainment, killing and oppression of innocent citizens (e.g restriction of internet access and the increasing number of fatalities). Overall, the report provides relevant information to policymakers and actors about detainment in Myanmar due to the military coup.

Introduction

The Myanmar coup of 2021

On February 1st, 2021, the Burmese military staged a coup, assuming control of the country and removing Aung San Suu Kyi, the civilian leader supported by the National League of Democracy (NLD), and other elected officials from power. Since the coup, many civilians and opposition forces have been detained, imprisoned, and killed. Detention as punishment for the legitimate exercise of fundamental human rights, including freedom of expression and opinion, freedom of peaceful assembly, and freedom of association, is arbitrary and problematic.

The goal of this report is to characterize the post-coup detainment between February and November 2021. The report analysis presents information on the demographics of victims, their locations and possible drivers of detainment. This will be conducted by exploring the relationship between detainment in Myanmar townships and geographic, social, and economic indicators across townships. Consequently, the hypothesis set up to facilitate significance testing is checking for significant relationship between detainment at the township level and townships with high number of college educated individuals, access to the internet and high living standards.

Data & Methodology

The analysis for the study was based on data collected from non-governmental organizations. The Assistance Association for Political Prisoners (AAPP) maintains databases the Myanmar 2021 coup victims. The database of registered detainees has 6709 observations with demographics data and current conditions. The imprisoned and fallen databases, also provided by the AAPP, have similar data but with significantly fewer observations, 308 and 1208, respectively. The Armed Conflict Location and Event Data Project (ACLED) database contains data on 14188 conflict events, which have taken place since the coup in February 2021, and its associated actors. Relevant socioeconomic indicators of Myanmar by region were provided by the Myanmar Information and Management Unit (MIMU).

The steps encompassed in the statistical analysis process were:

1. Importing the raw data: The first state (Raw data) was the data as it was extracted from the databases. The raw data contained wrong data types (e.g. numbers stored as strings), wrong category labels, unknown or unexpected character encoding, missing values and so on. The following data sets were imported and used for analysis:

- `detained.csv.gz`: the gzipped csv file concerning detainees (AAPP)
- `imprisoned.csv.gz`: the file concerning those sentenced (AAPP)
- `fallen.csv`: the file concerning those deceased civilians from conflict with the military (AAPP)
- `MIMU_Baseline... .xlsm`: an Excel macro file containing historical Myanmar indicators at the township level (MIMU)
- `conflicts.csv.gz`: a derived data set on conflicts and protests in Myanmar in 2021 (ACLED)
 

2. Type checking and data normalization: To convert the data to a technically correct state for further analysis, type conversion and data normalization was performed to columns such as age, gender, occupation, date, township and so on.

3. Data summarization: The consistent data was summarized into tables and descriptive figures for data exploration, which served as the starting point for statistical analysis. During data exploration it was discovered that the raw data had missing values, incorrectly imputed values which reduced the overall size of the data available for analysis and therefore posed threats of incorrect results.

Given that these data sets were obtained through different organizations, the data sets were combined to evaluate to find relationships between them. The first combination was made by binding detainees, imprisoned, and fallen. To ensure a clear relationship between them, a table containing official MIMU townships was inserted. Within this table, an additional column was inserted through mutation to determine the status of a person, specifically detained, imprisoned, or fallen. To find a relationship between conflicts within townships and the number of detainees, imprisoned, and fallen by month, the status column from the [master.coup] table was introduced to the conflict table. Lastly, to find relevant relationships between high numbers of detainees and socioeconomic indicators, we created an additional table with indicators by township, from the MIMU database, specifically literacy rates, number of households with internet access, wealth index, and number of people over the age of 25 with a college degree. The combination of the tables was done by townships as it is the most common variable throughout the data sets, and many demographic variables and dates were either not registered for many of the observations, or they were in a messy string. Although it should be noted that gender, sex, and date columns were formatted.

With the clean information obtained, the group used summarization functions and tables to search relevant information relating to the demographics of detainees, imprisoned, and fallen victims, as well as their relationships with conflicts and socioeconomic indicators. To determine significant relationships between the variables used, the group used regression analysis and statistical tests. A regression analysis was performed to find the relationship between the number of detainees by township and socioeconomic indicators, specifically wealth index, number of households with access to the internet, and number of people by township older than 25 with a college degree. A Chi-square test was performed to see the relationship between occupation, specifically government, students, and civilians, and the number of detainees, imprisoned and fallen.

Data Insights

Detainees Summary

#summary of pre-processed detainees table
detainees.summary %>%
  head(5) %>%
  kable(format = "markdown", caption = "Summary of detainees")
Summary of detainees
Name Gender Age Occupation Detainment month Condition Township
San Htwe M 66 Government Feb House Arrest Ayeyarwaddy
Kyaw Zaw (aka)Jork Ni M 69 Government Mar Detained Kyauktada
Myint Myint Kyi F 50 Government Mar Detained Kamaryut
Nyunt Nyan Paing M 23 Government Mar Detained South Dagon
Mya Mya Win F 75 Government Apr Detained Hlawgar SanKarean SuShwepyithar

Imprisoned Summary

#summary of pre-processed imprisoned table
imprisoned.summary %>%
  head(5) %>%
  kable(format = "markdown", caption = "Summary of imprisoned")
Summary of imprisoned
Name Gender Age Occupation Imprisonment month Township
Dr. Aung MoeNyo M 62 Government Feb Magwe
Aung Zay Latt(aka) Ko Zay M 36 Educator Mar Extension (2) (2) Pulaw
Kyaw Htet Oo(aka) Hsai WanOo M 28 Government Mar KhatLashio
Zaw Myo Naing M 19 Student Mar Myeik
Min Thant Ziin M 20 Student Mar Daing WinMawlamyine

Fallen Summary

#summary of pre-processed fallen table
fallen.summary %>%
  head(5) %>%
  kable(format = "markdown", caption = "Summary of fallen")
Summary of fallen
Name Gender Age Occupation Death month Township
Na Pwar (aka) KoNyi Nyi Oo M 32 Civilian Feb Maha AungMyay
Mya Thwate ThwateKhaing F 19 Student Feb Zeyathiri
Nay Nay Win Htet M 18 Civilian Feb Myeik
Thet Naing Win(aka) Min Min M 37 Civilian Feb Maha AungMyay
Wai Yan Tun M 16 Civilian Feb Maha AungMyay

All victims Summary

#summary of pre-processed victims table
victims.summary %>%
  head(5) %>%
  kable(format = "markdown", caption = "Summary of all coup victims")
Summary of all coup victims
Name Gender Age Occupation Month Event Township
San Htwe M 66 Government Feb Detained Ayeyarwaddy
Kyaw Zaw (aka)Jork Ni M 69 Government Mar Detained Kyauktada
Myint Myint Kyi F 50 Government Mar Detained Kamaryut
Nyunt Nyan Paing M 23 Government Mar Detained South Dagon
Mya Mya Win F 75 Government Apr Detained Hlawgar SanKarean SuShwepyithar

Detainee data overview

#pie chart of detainment by gender
detainees %>%
  filter(!is.na(Gender)) %>%
  ggplot(aes(x = "", y = Gender, fill = Gender)) + 
  geom_bar(stat = "identity", width = 1) +
  coord_polar("y", start = 0) +
  theme_void() +
  labs(title = "Detainment by gender", caption = "Figure 1")

Of the 6709 detainees, it was recorded that there were 5314 men and 1243 women, indicating that there were more detainee observations for men than women as shown in (Figure 1).

#Detainees by Condition
detainees %>% 
  group_by(Condition) %>%
  filter(!is.na(Condition)) %>%
  summarize(`Number of detainees` = n()) %>%
  kable(caption = "Detainees by Current Condition")
Detainees by Current Condition
Condition Number of detainees
Detained 6570
House Arrest 36
Arrested 1

Most detainees, 6570,were detained in prisons while at least 36 were placed under house arrest. The remarks in the database suggest that detainment was in relation to the protests. Although the data indicates that 1 person has been arrested, it is unclear whether all who have been detained have undergone due process.

#bar graph of detainment by month
detainees %>%
  filter(!is.na(Month)) %>%
  ggplot(aes(x = Month)) + geom_bar() + labs(y = "Number of detainees", title = "Detainment by Month", caption = "Figure 2")

Since the coup started, detainment was been highest in March 2021 (Figure 2) with at least 1682 people being detained. Since then, the number of recorded observations for detainment has dropped with 386 and 314 detainees reported in October and November 2021, respectively.

#summary of detainees by occupation
detainees %>%
  group_by(Occupation) %>%
  summarize(`Number of detainees` = n()) %>%
  arrange(desc(`Number of detainees`)) %>%
  kable(format = "markdown", caption = "Detainement by occupation")
Detainement by occupation
Occupation Number of detainees
Civilian 5357
Government 359
Student 339
NA 288
Educator 130
Medic 52
Religious worker 43
Reporter 39
Business person 39
Artist 35
Engineer 28

With a myriad of people across the country rising to protest the military coup, a wide variety of occupations were recorded for the detainees including students, teachers, religious workers, medics, engineers and government workers. From the data, students(339) and government workers(359) are the two most common occupations among detainees (besides the general category of civilians).

Detainment at Township level

#townships with the top 5 detainee counts
detainees %>% 
  nest(data =- Township) %>%
  inner_join(apply_leven(.$Township,
                         township.sizes$Township_Name,
                         distance.threshold = 0.28),
             by = c("Township" = "x")) %>%
  rename(detainee_township = Township, MIMU_township = y) %>%
  group_by(MIMU_township) %>%
  summarise(Detainees = sum(map_dbl(data,nrow))) %>%
  ungroup() %>%
  filter(!MIMU_township == "Other") %>%
  arrange(desc(Detainees)) %>% head(5) %>%
  rename(Township = MIMU_township) %>%
  select(Township, Detainees) %>%
  kable(format = "markdown", caption = "Townships with highest detainment")
Townships with highest detainment
Township Detainees
Monywa 104
Myeik 102
Hpa-An 97
Thingangyun 74
Hakha 62

Detainment per 1000 at Township level

#Detainees.per.1000 at MIMU township level
detainees %>% 
  #nesting
  nest(data =- Township) %>%
  #merging with the detainee_township, MIMU_township mapper
  inner_join(apply_leven(.$Township,
                         township.sizes$Township_Name,
                         distance.threshold = 0.28),
             by = c("Township" = "x")) %>%
  rename(detainee_township=Township, MIMU_township = y) %>%
  #summarise at MIMU_township level
  group_by(MIMU_township) %>%
  summarise(detainees = sum(map_dbl(data,nrow))) %>%
  ungroup() %>%
  # attach MIMU indicator and compute outcome "detainees.per.1000"
  left_join(township.sizes, by = c("MIMU_township" = "Township_Name")) %>%
  mutate(detainees.per.1000 = detainees/Value) %>%
  filter(!is.na(detainees.per.1000)) %>% #exclude NA
  arrange(desc(detainees.per.1000)) %>% 
  head(5) %>% #show top 5
  rename(Township = MIMU_township, `Number of detainees` = detainees, `Detainees per 1000` = detainees.per.1000) %>%
  select(Township, `Number of detainees`, `Detainees per 1000`) %>%
  kable(caption = "Detainees per 1000 at Township Level")
Detainees per 1000 at Township Level
Township Number of detainees Detainees per 1000
Hakha 62 1.2823164
Latha 10 0.3990423
Myeik 102 0.3585363
Seikkan 1 0.3533569
Thingangyun 74 0.3532388

The top five townships with the largest group of detainees are Monywa, Myeik, Hpa-An, Thingangyun, and Hakha. In terms of detainees per 1000 people, the top five townships are Hakha, Latha, Myeik, Seikkan and Thingangyun.

Imprisoned and Fallen Victims

Imprisoned by Gender

# Imprisoned by Gender
imprisoned %>%
  group_by(`Sex /Age`) %>%
  filter(`Sex /Age` == "F" | `Sex /Age` == "M") %>%
  summarize("Population" = n()) %>%
  kable(caption = "Imprisoned by Sex", col.names = c("Gender", "Population"))
Imprisoned by Sex
Gender Population
F 55
M 249

Imprisoned by Gender

# Imprisoned by Age
imprisoned %>%
  filter(!is.na(Age)) %>%
  select(Age) %>%
  mutate(AgeGroup = case_when(Age >= 40 ~ 'Over 40',
                              Age >= 30  & Age < 40 ~ '30-39',
                              Age >= 18  & Age < 30 ~ '18-29',
                              Age < 18 ~ 'Under 18')) %>%
  mutate(AgeGroup = factor(AgeGroup, levels = c("Under 18", "18-29", "30-39", "Over 40"))) %>%
  group_by(AgeGroup) %>%
  count() %>%
  kable(caption = "Imprisoned by Age", col.names = c("Age Group", "Population"))
Imprisoned by Age
Age Group Population
Under 18 2
18-29 21
30-39 9
Over 40 7

Imprisoned by Occupation

# Imprisoned by Occupation
imprisoned %>%
  group_by(`Occupation`) %>%
  filter(!is.na(Occupation)) %>%
  count() %>%
  kable(caption = "Imprisoned by Occupation", col.names = c("Occupation", "Population"))
Imprisoned by Occupation
Occupation Population
Government 34
Civilian 243
Student 9
Reporter 3
Educator 4
Artist 3
Religious worker 1

Fallen by Gender

# Fallen by Gender
fallen %>%
  group_by(`Sex`) %>%
  filter(`Sex` == "F" | `Sex` == "M") %>%
  summarize("Population" = n()) %>%
  kable(caption = "Fallen by Sex", col.names = c("Gender", "Population"))
Fallen by Sex
Gender Population
F 84
M 1085

Fallen by Age

# Fallen by Age
fallen %>%
  filter(!is.na(Age)) %>%
  select(Age) %>%
  mutate(AgeGroup = case_when(Age >= 40 ~ 'Over 40',
                              Age >= 30  & Age < 40 ~ '30-39',
                              Age >= 18  & Age < 30 ~ '18-29',
                              Age < 18 ~ 'Under 18')) %>%
  mutate(AgeGroup = factor(AgeGroup, levels = c("Under 18", "18-29", "30-39", "Over 40"))) %>%
  group_by(AgeGroup) %>%
  count() %>%
  kable(caption = "Fallen by Age", col.names = c("Age Group", "Population"))
Fallen by Age
Age Group Population
Under 18 75
18-29 374
30-39 227
Over 40 228

Fallen by Occupation

# Fallen by Occupation
fallen %>%
  group_by(Occupation) %>%
  filter(!is.na(Occupation)) %>%
  count() %>%
  kable(caption = "Fallen by Occupation", col.names = c("Occupation", "Population"))
Fallen by Occupation
Occupation Population
Government 20
Civilian 978
Student 79
Activist 5
Volunteer 6
Educator 17
Artist 5
Medic 7
Security Forces 6
Religious worker 1
Business person 8
Engineer 4
Farmer 5

Imprisoned and fallen data overview

For the imprisoned and fallen observations, males consist of over 81% and over 90%, respectively. The victims who have been imprisoned and killed are mostly aged between 18 to 40 with 33 and 644 counts respectively. The imprisoned and fallen population recorded consists mostly of civilians, government workers, and students. Most victims were detained(1682), imprisoned(145), or killed(519) in March (as seen in Figure 3 below) as the intensity of the interventions by authorities severely increased at the beginning of March.

#Detainment, imprisonment and death by month
coup.victims %>%
  filter(!is.na(Month)) %>%
  group_by(Month, Event) %>%
  summarise(count = n()) %>%
  ggplot(aes(x = Month, y = count, group = Event, color = Event)) + 
  geom_line(size = 2, alpha = 0.9) +
  labs(x = "Month", 
       y = "Number of victims", 
       title = "Detainment, Imprisonment & Death by Month", 
       fill = "Conflict type", 
       caption = "Figure 3")

Conflict types by Month

According to the record of conflicts, mass protests and riots have occurred across Myanmar since the military seized control on February 1st 2021. Between February and April, there was a significant rise in the number of protests and riots cases, along with violence against civilians from the military forces as seen in (Figure 4) below. During this time, a majority of civilians, students, and government workers were detained, imprisoned, or killed according to our previous analysis. The conflicts escalated starting from May during which the protests and riots have escalated into battles and explosions/remote violence and the number reached its peak of 243 in October.

#fatalities by month across conflicts 
conflicts %>%
  mutate(Month = case_when(str_detect(event_date, "Jan") ~ "Jan",
                           str_detect(event_date, "Feb") ~ "Feb",
                           str_detect(event_date, "Mar") ~ "Mar",
                           str_detect(event_date, "Apr") ~ "Apr",
                           str_detect(event_date, "May") ~ "May",
                           str_detect(event_date, "Jun") ~ "Jun",
                           str_detect(event_date, "Jul") ~ "Jul",
                           str_detect(event_date, "Aug") ~ "Aug",
                           str_detect(event_date, "Sep") ~ "Sep",
                           str_detect(event_date, "Oct") ~ "Oct",
                           str_detect(event_date, "Nov") ~ "Nov",
                           str_detect(event_date, "Dec") ~ "Dec")) %>%
  mutate(Month = factor(Month, levels = c("Jan",
                                          "Feb",
                                          "Mar",
                                          "Apr",
                                          "May",
                                          "Jun",
                                          "Jul",
                                          "Aug",
                                          "Sep",
                                          "Oct",
                                          "Nov",
                                          "Dec"))) %>%
  group_by(Month, event_type) %>%
  ggplot(aes(x = Month, y = fatalities, fill = event_type)) + 
  geom_histogram(stat = "identity") +
  labs(x = "Month", 
       y = "Number of fatalities", 
       title = "Fatalities by Month", 
       fill = "Conflict type", 
       caption = "Figure 4")

sector.indicators <- sector.indicators %>%
  rename(Township = Township_Name) #rename Township for uniformity
joined.mimu <- joined.mimu %>%
  rename(Township = MIMU_township) #rename Township for uniformity

#township college grad
township.literacy <- sector.indicators %>%
  filter(`Sub_Sector` == "Highest Level of Completion" & `Indicator_Type` == "University/ College - Total") %>%
  group_by(Township) %>%
  summarize(`No. of College Grads` = `2014`)

#Township College completion count vs detainees
township.literacy.ext <- inner_join(township.literacy, joined.mimu) %>%
  group_by(Township) %>%
  summarise(Detainees = detainees, `No. of College Grads`) %>%
  arrange(desc(Detainees))

Analysis & Results

To test for correlation and significance in drivers of detainment, the statistical analysis included a chi-square test of independence and a linear regression analysis.

Chi-square test

To test for significant association between the victim types (e.g. Government worker, student, civilian) and their current condition (i.e. detained, imprisoned or killed), we ran a Chi-square test of independence on the contingency table below. The table shows the observed number of detainees in each subgroup.

victims.chisq <- coup.victims %>% #what victim type is likely to detained, imprisoned or killed
  mutate(Status = case_when(Occupation == "Government" ~ "Government worker",
                            Occupation == "Student" ~ "Student",
                            TRUE ~ "Civilian")) %>%
  with(table(Status, Event))

The null and alternative hypotheses are:

Null: the variables are independent, there is no relationship between the victim type and the victim’s condition. Knowing the value of one variable does not help to predict the value of the other variable

Alternative: the variables are dependent, there is a relationship between the victim type and the victim’s condition. Knowing the value of one variable helps to predict the value of the other variable

victims.chisq %>% #cross tabulation of victim type and condition
  kable(caption = "Victim type vs Current condition")
Victim type vs Current condition
Detained Imprisoned Fallen
Civilian 6011 265 1109
Government worker 359 34 20
Student 339 9 79
victims.csq.test <- chisq.test(victims.chisq) #Chi-square test 
victims.csq.test
## 
##  Pearson's Chi-squared test
## 
## data:  victims.chisq
## X-squared = 59.507, df = 4, p-value = 3.682e-12

From the chi-square test, the p-value of 3.6824568^{-12} is less than the significance level of 0.05. Thus, we can reject the null hypothesis. This means that there is a significant relationship between the victim type and the victim’s condition.

Regression

To assess whether detainment is driven by social and economic factors, two linear regression models were run at the township level on detainees over four socio-economic indicators: wealth index measuring standard of living, household internet access, adult literacy rate and population 25 years and over with college level of education.

Before running the model, we suspect that higher education level (Population 25 yr and over who received college degree by township), better living standards (Wealth index by township), and easier access to information (Number of households with internet access by township) would lead to a higher chance of being detained during the conflicts in Myanmar.

The first linear model fit is a regression of the number of detainees per township against the above four socio-economic indicators at the township level.

#Regressions 

#Wealth index indicator by township
wealth.index <- sector.indicators %>%
  filter(Sub_Sector == "Development" &
         Indicator_Name == "Wealth Ranking Index") %>%
  select(Township, `2015`) %>%
  rename("wealth_index" = `2015`)

#College level education indicator by township
college.level <- sector.indicators %>%
  filter(Sub_Sector == "Highest Level of Completion" &
         Indicator_Type == "University/ College - Total") %>%
  select(Township, `2014`) %>%
  rename("college_level" = `2014`)

#Adult literacy indicator by township
adult.literacy <- sector.indicators %>%
  filter(Indicator_Name == "Adult literacy rate" &
         Indicator_Type == "Total") %>%
  select(Township, `2014`) %>%
  rename("literacy_rate" = `2014`)

#Internet access indicator by township
internet.access <- sector.indicators %>%
  filter(Sub_Sector == "Internet" &
         Indicator_Type == "Total") %>%
  select(Township, `2014`) %>%
  rename("internet_access" = `2014`)

#join indicators to MIMU township levels
township.indicators <- joined.mimu %>%
  inner_join(internet.access, by = c("Township" = "Township")) %>%
  inner_join(wealth.index, by = c("Township" = "Township")) %>%
  inner_join(college.level, by = c("Township" = "Township")) %>%
  inner_join(adult.literacy, by = c("Township" = "Township"))

#Linear model 1: linear model regressing detainees on internet access, wealth index, college level education, and adult literacy rate
township.lm <- lm(detainees ~ internet_access + wealth_index + college_level + literacy_rate, data = township.indicators)
summary(township.lm)
## 
## Call:
## lm(formula = detainees ~ internet_access + wealth_index + college_level + 
##     literacy_rate, data = township.indicators)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -35.658  -5.249  -2.415   2.329  84.022 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      8.8348835  8.9921840   0.983    0.327    
## internet_access  0.0002717  0.0005771   0.471    0.638    
## wealth_index    -0.3770570  0.3023493  -1.247    0.214    
## college_level    0.0012379  0.0002772   4.466 1.34e-05 ***
## literacy_rate   -0.0883614  0.1013430  -0.872    0.384    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 13.87 on 197 degrees of freedom
## Multiple R-squared:  0.3445, Adjusted R-squared:  0.3312 
## F-statistic: 25.88 on 4 and 197 DF,  p-value: < 2.2e-16
township.lm.coef <- summary(township.lm)$coef

Looking at the p-values, it looks like college_level (Population 25 yr and over who received college degree by township) (coefficient: 0.0012 , p-value: 1.3395715^{-5}) is the only statistically significant predictor of detainment at the township level. The coefficient is positive, so detainment at the township level is positively associated with college level education in the population.

To diagnose collinearity among the indicators, the matrix plot below was used to visualize the correlation between pairs of the coefficients used in the linear model above. The contingency table shows the correlation between each pair of the coefficients.

#check for collinearity
lm.var <- c("internet_access", "wealth_index", "college_level", "literacy_rate")

#scatter plots of all indicators
township.indicators %>% select(all_of(lm.var)) %>% pairs()

#correlation table of all indicators
round(cor(township.indicators[, lm.var]), 2) %>%
  kable(caption = "Contingency table of regression indicators")
Contingency table of regression indicators
internet_access wealth_index college_level literacy_rate
internet_access 1.00 0.62 0.89 0.24
wealth_index 0.62 1.00 0.63 0.24
college_level 0.89 0.63 1.00 0.32
literacy_rate 0.24 0.24 0.32 1.00

The plot and contingency table show correlation between some coefficients. In particular, it shows that college level of education completion and households with internet access are highly correlated. This is reasonable since people who have a college degree probably live in a wealthier household where internet access is guaranteed.

In the second model, the college_level variable was dropped and we fit a regression using the other three variables.

#Linear model 2: linear model regressing detainees on internet access, wealth index, and adult literacy rate
township.lm2 <- lm(detainees ~ internet_access + wealth_index + literacy_rate, data = township.indicators)
summary(township.lm2)
## 
## Call:
## lm(formula = detainees ~ internet_access + wealth_index + literacy_rate, 
##     data = township.indicators)
## 
## Residuals:
##     Min      1Q  Median      3Q     Max 
## -34.075  -5.806  -3.628   1.933  84.974 
## 
## Coefficients:
##                   Estimate Std. Error t value Pr(>|t|)    
## (Intercept)      4.6647011  9.3617296   0.498    0.619    
## internet_access  0.0023979  0.0003414   7.024 3.39e-11 ***
## wealth_index    -0.1336364  0.3113011  -0.429    0.668    
## literacy_rate    0.0096448  0.1035647   0.093    0.926    
## ---
## Signif. codes:  0 '***' 0.001 '**' 0.01 '*' 0.05 '.' 0.1 ' ' 1
## 
## Residual standard error: 14.52 on 198 degrees of freedom
## Multiple R-squared:  0.2781, Adjusted R-squared:  0.2672 
## F-statistic: 25.43 on 3 and 198 DF,  p-value: 5.865e-14
township.lm2.coef <- summary(township.lm2)$coef

With college_level dropped, the second linear model shows that internet_access is the only coefficient that is statistically significant (coefficient: 0.0024 , p-value: 3.3885472^{-11}) at the alpha level of 0.05. Thus, amongst the three indicators in the model internet_access is the only statistically significant predictor of detainment at the township level. The number of internet access in the township has a high positive correlation with the number of detainees during the conflicts in that township.

Indeed, a significant correlation between two variables means that changes in one variable are associated (positively or negatively) with changes in the other variable. Nonetheless, we acknowledge that a significant correlation does not indicate that variations in one variable cause the variations in the other variable.

Below is a comparison of the regression models (with and without collinearity):

#comparison between model 1 and model 2
list(first.model = township.lm,
     second.model = township.lm2) %>%
  modelsummary(statistic = NULL, stars = T)
first.model second.model
(Intercept) 8.835 4.665
internet_access 0.000 0.002***
wealth_index −0.377 −0.134
college_level 0.001***
literacy_rate −0.088 0.010
Num.Obs. 202 202
R2 0.344 0.278
R2 Adj. 0.331 0.267
AIC 1642.6 1660.0
BIC 1662.4 1676.6
Log.Lik. −815.283 −825.025
F 25.882 25.426
+ p < 0.1, * p < 0.05, ** p < 0.01, *** p < 0.001

The comparison shows that the coefficient of adult_literacy went from being negatively correlated to positively to positively correlated.

plot(township.lm) #diagnostics test for linear model 1

plot(township.lm2) #diagnostics test for linear model 2

Residuals vs. Fitted The plot for model 1 shows some linearity while the plot for model 2 shows non-linearity. Furthermore, we see that the variance appears to be increasing in fitted value.

Normal QQ plot The residuals appear highly non-normal for both models. Both the lower tail and upper tail are heavier than we would expect under normality. This may be due to the non-constant variance issue we observed in the Residuals vs. Fitted plot.

Scale-location plot We see a slight trend in residual variance that runs through the right side of the plot in both models.

Residuals vs Leverage The outliers observed are not significant.

Limitations

The main limitation that could have potentially affected the results was the different spelling for townships in the detainees, imprisoned, and fallen data sets. This made it very difficult to group the people by township. As a result, our group introduced a table with the township name as it appears on the MIMU data set and combined it with the original townships using a function that determined the similarities between spelling and used the most similar. However, many townships on the original data sets were categorized as “Other.” This caused the sample size to be reduced almost by two-thirds. In addition, data sets of detainees, imprisoned, and fallen have no information on relevant variables that describe the demographics and arrest information of the victims. This created a limitation to accurately describe the demographics of detainees, imprisoned, and fallen. For instance, only 128 and 151 detainees had gender and age registered, respectively. Only 336 detainees had an arrest date related to their detainment. The imprisoned data set has 306 observations with gender and 39 with age. In the fallen data sets, 1169 and 904 observations have a gender and age, respectively, registered. The missingness found further reduced the number of observations used to find the demographics and related indicators of detainees, imprisoned, and fallen victims. Given that the data sets provide little information regarding the demographics of the detainees, imprisoned, and fallen victims, the socio-economic indicators were used to find relationships between the numbers of victims and townships. However, the indicators provide an average of the population by township. This means that data does not accurately represent the part of the population that was involved in the protest. It should also be noted that the data of most recent indicators are from 2014 or 2015. There’s a chance that current indicators may have changed, possibly affecting the significance of the relationship between the indicators and detainees.

Conclusion

In Myanmar, mass protests have been seen almost daily since the February 1st coup and the protests and riots have eventually evolved into battles and violence due to the coercion. Through two regression models, it was discovered that the level of access to the internet has a positive correlation with the number of people who got detained in each township. The actions of the military such as internet blackouts have proven to justify this correlation. As with areas affected by conflict due to heavy military action, internet restrictions are imposed on the population to prevent the spread of details of the situation via the internet. Thus, we conclude that one indicator of detainment in Myanmar is access to information and ability to spread information via the internet. Despite the sanctions imposed by both the US and EU that intentionally hit the junta, there are limited options over how to deal with the Myanmar situation as well as helping the civilians there. Hopefully, non-governmental organizations and other relevant international organizations can provide hope for the affected population via online or local sources. In the meanwhile, the future of Myanmar is still uncertain so the data should be monitored to provide more feasible solutions.

Appendix

#conflicts across townships
conflicts %>%
  datasummary(data = ., (`Township` = admin3) ~ (`Conflict Type` = event_type),
              fmt = function(.) signif(., 2),
              title ="Conflicts across Townships", sparse_header = F)
Conflicts across Townships
Conflict Type
Township Battles Explosions/Remote violence Protests Riots Strategic developments Violence against civilians
Ahlone 1 5 14 0 1 1
Amarapura 0 9 28 0 7 14
Ann 0 6 4 0 2 0
Aunglan 0 1 9 0 7 3
Aungmyaythazan 3 9 86 0 4 7
Ayadaw 4 15 1 0 13 9
Bago 0 12 45 4 22 14
Bahan 0 13 23 3 8 4
Banmauk 0 0 8 0 0 0
Bawlake 10 2 2 0 5 2
Bhamo 5 11 16 0 20 5
Bilin 5 12 9 0 1 9
Bogale 1 2 1 0 7 0
Bokpyin 0 0 5 0 0 0
Botahtaung 1 6 3 0 5 2
Budalin 3 15 8 0 12 12
Buthidaung 2 2 0 0 5 4
Chanayethazan 0 13 19 0 6 6
Chanmyathazi 4 32 77 1 14 21
Chauk 0 2 30 0 3 2
Chaung-U 4 4 25 0 11 6
Chaungzon 0 2 1 0 2 3
Chipwi 0 0 19 0 4 0
Dagon 0 4 16 1 1 0
Dagon Myothit-East 0 1 8 0 4 0
Dagon Myothit-North 0 15 36 0 15 4
Dagon Myothit-Seikkan 0 6 12 0 4 6
Dagon Myothit-South 5 14 28 2 11 16
Daik-U 0 2 6 0 2 2
Dala 0 3 9 0 3 0
Danubyu 0 2 3 0 0 1
Dawbon 0 6 9 0 4 4
Dawei 10 5 130 1 26 14
Dedaye 0 1 3 0 1 0
Demoso 73 23 22 1 19 17
Det Khi Na Thi Ri 1 0 1 0 0 2
Einme 0 0 1 0 4 0
Falam 9 5 18 0 17 2
Gangaw 22 23 14 0 35 14
Gwa 0 0 8 0 4 0
Gyobingauk 0 3 1 0 2 0
Hakha 27 8 44 0 21 5
Hinthada 0 3 14 0 6 0
Hkamti 4 2 5 0 4 0
Hlaing 2 22 36 3 12 13
Hlaingbwe 0 3 7 0 2 1
Hlaingtharya-East 5 32 46 2 18 21
Hlaingtharya-West 0 0 0 0 0 1
Hlegu 1 5 3 0 11 9
Hmawbi 0 3 2 0 2 1
Homalin 9 4 6 0 6 8
Hopang 0 0 3 0 0 0
Hopong 0 0 3 0 4 0
Hpa-An 18 9 43 0 20 6
Hpakant 69 58 130 0 23 11
Hpapun 55 41 7 0 24 7
Hpasawng 4 0 1 0 0 0
Hpruso 9 7 6 0 4 2
Hseni 19 5 11 0 4 3
Hsihseng 0 1 1 0 5 0
Hsipaw 21 8 50 0 13 16
Htantabin 2 2 22 0 0 4
Indaw 3 4 15 0 2 0
Ingapu 0 0 8 0 3 2
Injangyang 9 1 0 0 1 0
Insein 0 22 49 10 12 15
Kalaw 1 2 9 0 14 4
Kale 40 31 140 3 64 32
Kalewa 0 2 0 0 1 0
Kamaryut 1 12 44 2 14 5
Kamma 1 0 7 0 6 0
Kanbalu 4 10 4 1 14 11
Kangyidaunt 2 6 0 0 9 2
Kani 39 21 9 0 49 29
Kanpetlet 14 1 13 0 5 3
Katha 27 11 9 0 19 1
Kawa 0 3 0 0 2 1
Kawhmu 3 1 7 0 2 2
Kawkareik 18 6 28 0 8 2
Kawlin 11 11 26 1 13 9
Kawthoung 0 0 8 0 3 3
Kayan 2 3 0 0 4 4
Kengtung 0 0 12 0 4 2
Khaunglanhpu 0 0 0 0 0 1
Khin-U 17 20 12 1 39 43
Konkyan 1 0 0 0 0 0
Kungyangon 1 1 25 1 2 5
Kunhing 0 0 3 0 1 0
Kunlong 5 1 3 0 0 0
Kutkai 76 8 42 1 8 9
Kyaiklat 0 3 1 0 4 0
Kyaikmaraw 0 2 4 0 1 1
Kyaikto 11 24 16 0 8 14
Kyainseikgyi 12 14 26 0 10 8
Kyangin 0 2 2 0 2 1
Kyaukkyi 13 5 3 0 5 1
Kyaukme 54 18 110 0 24 24
Kyaukpadaung 1 11 9 0 10 9
Kyaukpyu 0 0 3 0 0 2
Kyaukse 3 6 25 0 6 5
Kyauktada 0 5 34 2 2 1
Kyauktaga 0 2 13 1 6 3
Kyauktan 0 0 1 0 0 2
Kyauktaw 0 4 1 0 2 0
Kyaunggon 0 3 0 0 0 0
Kyeemyindaing 1 11 20 1 4 4
Kyethi 21 1 0 0 5 0
Kyonpyaw 1 5 0 0 6 1
Kyunhla 2 3 5 0 6 5
Kyunsu 0 0 0 0 1 1
Labutta 0 2 31 0 2 2
Lahe 0 0 3 0 0 0
Lanmadaw 0 8 7 0 2 1
Lashio 16 19 75 0 25 8
Latha 0 4 4 0 0 1
Laukkaing 0 1 1 0 2 0
Launglon 2 2 70 0 14 11
Lawksawk 2 0 2 0 3 0
Lemyethna 0 1 0 0 0 0
Letpadan 0 1 8 0 2 1
Lewe 1 1 2 0 1 0
Loikaw 23 20 36 1 23 13
Loilen 0 1 5 0 2 0
Mabein 0 0 2 0 1 0
Machanbaw 1 0 0 0 1 0
Madaya 2 13 10 0 25 23
Magway 0 15 48 0 23 9
Mahaaungmyay 1 22 65 2 17 20
Mahlaing 0 0 9 0 1 1
Mansi 20 15 0 0 1 0
Manton 5 5 4 0 0 3
Matupi 8 3 24 0 8 1
Maubin 0 14 7 0 21 7
Maungdaw 6 1 0 0 3 7
Mawlaik 0 0 2 0 0 0
Mawlamyine 0 10 71 3 14 6
Mawlamyinegyun 2 6 4 0 3 1
Mayangone 2 20 28 1 11 9
Meiktila 1 5 32 2 11 4
Mese 0 0 1 0 0 0
Minbu 1 1 13 0 5 0
Minbya 0 1 0 0 0 1
Mindat 59 3 28 1 23 4
Mingaladon 3 13 16 0 20 8
Mingalartaungnyunt 0 9 16 2 3 7
Mingin 25 1 2 0 24 24
Minhla 0 4 17 0 5 0
Mogaung 11 4 43 0 6 5
Mogoke 12 25 76 1 58 27
Mohnyin 12 13 40 0 18 12
Momauk 100 75 13 0 12 6
Monghpyak 0 0 2 0 2 0
Monghsat 0 0 1 0 1 0
Monghsu 0 0 3 0 1 3
Mongkaing 8 4 1 0 7 2
Mongkhet 0 0 1 0 0 0
Mongmit 0 1 4 0 3 3
Mongnai 1 0 0 0 0 0
Mongpan 2 1 1 0 0 0
Mongping 0 3 0 0 0 0
Mongton 0 0 3 0 0 0
Mongyai 0 5 2 0 1 6
Mongyawng 0 3 0 0 0 0
Monyo 0 1 27 0 1 0
Monywa 16 41 120 2 45 45
Mrauk-U 0 0 0 0 3 2
Mudon 0 1 8 0 12 3
Munaung 0 0 4 0 0 0
Muse 120 35 66 2 44 20
Myaing 6 18 68 0 14 9
Myanaung 0 1 7 0 7 3
Myaung 17 15 3 0 18 12
Myaungmya 0 4 6 0 10 0
Myawaddy 9 13 32 0 13 7
Myebon 0 1 0 0 0 0
Myeik 0 4 26 2 15 4
Myingyan 12 15 37 1 33 40
Myinmu 3 6 5 0 2 1
Myitkyina 12 21 60 1 29 13
Myittha 0 6 11 0 3 1
Myothit 1 5 0 0 6 10
Namhkan 6 10 53 0 2 10
Namhsan 9 5 24 0 5 6
Namtu 30 11 17 0 17 8
Nansang 4 0 2 0 3 0
Nanyun 1 0 0 0 0 0
Natmauk 0 4 9 0 12 6
Natogyi 3 2 7 0 2 3
Nattalin 2 2 0 0 2 2
Nawnghkio 2 1 17 0 4 2
Nawngmun 0 0 1 0 4 1
Ngape 0 0 4 0 1 1
Ngapudaw 0 3 0 0 5 1
Ngazun 1 3 2 0 7 3
North Okkalapa 2 9 36 3 7 7
Nyaung-U 0 5 42 0 6 8
Nyaungdon 0 7 1 0 3 0
Nyaunglebin 5 7 17 0 6 2
Nyaungshwe 0 0 3 0 3 5
Oke Ta Ra Thi Ri 0 2 3 0 4 1
Okpho 0 0 1 0 0 0
Oktwin 0 0 11 0 1 1
Pabedan 0 1 5 0 1 1
Padaung 0 5 0 0 6 0
Pakokku 1 12 58 1 10 9
Palaw 11 4 2 0 6 9
Pale 30 28 7 0 16 17
Paletwa 3 5 3 0 4 0
Pangsang 1 0 0 0 0 0
Pantanaw 0 1 2 0 5 1
Pathein 6 15 57 3 41 12
Patheingyi 2 8 6 0 3 6
Pauk 9 23 3 0 27 17
Paukkhaung 0 0 0 0 1 0
Pauktaw 0 0 0 0 1 0
Paung 0 9 27 0 5 4
Paungbyin 0 0 1 0 1 0
Paungde 1 8 1 0 5 8
Pazundaung 0 5 6 1 6 1
Pekon 41 19 4 0 25 20
Phyu 2 5 41 0 1 2
Pindaya 0 0 3 0 1 0
Pinlaung 3 1 1 0 3 0
Pinlebu 8 3 8 0 2 2
Poke Ba Thi Ri 0 2 2 0 0 2
Ponnagyun 0 3 0 0 1 1
Puta-O 11 2 25 0 14 5
Pwintbyu 1 13 4 2 16 7
Pyapon 0 10 4 0 9 3
Pyawbwe 0 1 1 0 0 0
Pyay 1 14 15 0 18 11
Pyigyitagon 3 10 140 0 4 11
Pyinmana 2 8 25 0 3 2
Pyinoolwin 2 1 23 1 9 3
Ramree 0 0 0 0 2 0
Rathedaung 0 1 0 0 0 1
Sagaing 7 10 41 0 18 5
Salin 1 2 4 1 4 5
Salingyi 2 12 150 0 1 7
Sanchaung 2 16 57 5 20 6
Saw 12 5 1 0 13 3
Seikgyikanaungto 1 0 4 0 1 0
Seikphyu 0 2 0 0 0 2
Shadaw 1 0 1 0 0 0
Shwebo 3 11 57 2 31 23
Shwedaung 0 1 0 0 0 1
Shwegu 30 11 8 0 9 5
Shwegyin 0 1 0 0 4 0
Shwepyithar 0 16 36 1 10 10
Sidoktaya 0 0 2 0 1 0
Sinbaungwe 0 0 1 0 0 2
Singu 1 5 2 0 5 10
Sintgaing 1 5 6 0 11 7
Sittwe 0 0 7 0 4 5
South Okkalapa 0 18 36 1 7 6
Sumprabum 10 0 0 0 1 1
Tabayin 10 18 23 1 37 12
Tachileik 1 4 16 0 8 1
Tada-U 1 2 2 0 1 0
Taikkyi 0 0 77 0 4 2
Tamu 10 4 6 1 5 10
Tamwe 1 15 59 2 17 4
Tanai 32 16 2 0 9 3
Tangyan 0 1 5 0 2 5
Tanintharyi 2 2 1 0 2 4
Tatkon 0 2 2 0 0 0
Taungdwingyi 1 13 11 2 37 20
Taunggyi 0 16 51 3 45 14
Taungoo 5 3 13 0 6 3
Taungtha 2 7 4 0 15 12
Taze 6 29 25 1 27 32
Tedim 12 5 17 0 4 3
Thabaung 0 1 0 0 0 0
Thabeikkyin 1 5 4 0 6 5
Thaketa 4 18 45 6 13 10
Thanbyuzayat 0 2 8 0 1 1
Thandaunggyi 6 1 3 0 4 1
Thandwe 0 0 17 0 4 1
Thanlyin 3 9 12 0 7 8
Thantlang 13 7 25 0 11 3
Thaton 13 17 13 0 7 12
Thayarwady 0 3 1 0 7 0
Thayet 2 2 10 0 5 1
Thayetchaung 6 1 9 0 10 7
Thazi 0 5 12 0 1 0
Thegon 0 2 0 0 5 0
Thingangyun 1 23 23 2 13 4
Thongwa 0 0 0 0 6 2
Tigyaing 9 10 1 0 13 8
Tilin 10 4 2 0 6 5
Tonzang 0 0 12 0 1 0
Toungup 0 0 8 0 3 1
Twantay 1 4 3 0 7 5
Waingmaw 40 36 16 0 9 8
Wakema 0 2 1 0 6 0
Waw 0 3 0 0 2 2
Wetlet 6 6 32 0 22 14
Wundwin 0 1 22 0 4 9
Wuntho 0 1 0 0 1 1
Yankin 0 8 20 0 8 2
Ye 10 26 37 0 30 14
Ye-U 3 10 17 0 12 11
Yebyu 0 4 80 0 6 4
Yedashe 0 1 0 0 1 3
Yegyi 0 9 0 0 9 3
Yenangyaung 0 4 5 0 6 2
Yesagyo 14 58 11 0 26 12
Yinmarbin 26 25 170 1 30 17
Ywangan 0 0 0 0 2 2
Za Bu Thi Ri 0 5 5 0 3 0
Zalun 0 1 1 0 2 0
Zay Yar Thi Ri 0 0 3 0 0 1
Zigon 0 2 3 0 0 0